function VERIFICA_FORMA(forma)
{
    for (var i = 0; i < forma.elements.length; ++i) {
        var elemento = forma.elements[i]
        var callback = elemento.getAttribute("validate")

        if (callback && !window[callback](elemento)) {
            return false
        }
    }

    return true
}


function FILTRO_TEXTO( )
{
    return new RegExp(/[A-Za-z]{3,}/)
}

function FILTRO_TEXTO_ALFABETICO( )
{
    return new RegExp(/^[A-Za-z\s]{3,}$/)
}

function FILTRO_TEXTO_NUMERICO( )
{
    return new RegExp(/^\d+$/)
}

function FILTRO_EMAIL( )
{
    return new RegExp(/^(-|\w)+(\.(-|\w)+)*@(-|\w)+(\.(-|\w){2,})+$/)
}


function ES_COMANDO(c)
{
    return (c <= 31)
}

function ES_DIGITO(c)
{
    return (c >= 48 && c <= 57)
}

function ES_PUNTO(c)
{
    return (c == 46)
}


var VALOR_KEYPRESS = (navigator.appName == "Microsoft Internet Explorer" ?
    function(e) {
        return e.keyCode
    }
    :
    function(e) {
        return e.which
    }
)


function RANGO(input, minimo, maximo, evento)
{
    var caracter = VALOR_KEYPRESS(evento)

    if (ES_COMANDO(caracter)) {
        return true
    }
    
    if (ES_DIGITO(caracter)) {
        var valor = parseInt(input.value + String.fromCharCode(caracter), 10)
        
        if ((minimo == null || valor >= minimo) && (maximo == null || valor <= maximo)) {
            return true
        }
    }
    
    return false
}

function RANGO_FLOTANTE(input, minimo, maximo, evento)
{
    var caracter = VALOR_KEYPRESS(evento)
    
    if (ES_COMANDO(caracter)) {
        return true
    }

    if (ES_DIGITO(caracter) || ES_PUNTO(caracter)) {
        var valor = parseFloat(input.value + String.fromCharCode(caracter))
        
        if (!isNaN(valor) && (minimo == null || valor >= minimo) && (maximo == null || valor <= maximo)) {
            return true
        }
    }
    
    return false
}